package service.impl;

import global.Constants;
import global.security.SessionUtils;

import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.List;

import service.TodoService;
import util.DateUtils;
import dao.TodoDAO;
import domain.Todo;

/**
 * 任务Service实现类.
 * <p>
 * 创建日期：2010-07-01<br>
 * 创建人：Xiyt<br>
 * 修改日期：<br>
 * 修改人：<br>
 * 修改内容：<br>
 * 
 * @author Xiyt
 * @version 1.0
 */
public class TodoServiceImpl implements TodoService {

	/**
	 * 任务Dao
	 * */
	private TodoDAO todoDao = null;

	/**
	 * 设定任务Dao
	 * */
	public void setTodoDao(TodoDAO todoDao) {
		this.todoDao = todoDao;
	}

	/**
	 * 查询任务数量
	 * @param paramNote 任务
	 * @return int 任务数量
	 */
	public int countByCriteria(Todo paramTodo) {
		// 查询任务数量
		paramTodo = getConditions(paramTodo);
		int count = todoDao.countByCriteria(paramTodo);
		return count;
	}

	/**
	 * 查询任务列表带分页
	 * @param paramNote 任务
	 * @return List 任务列表
	 */
	public List<Todo> selectByCriteriaForPaging(Todo paramTodo) {
		// 查询任务列表带分页
		paramTodo = getConditions(paramTodo);
		paramTodo.setCreateUser(SessionUtils.getCurrentUserId());
		List<Todo> todoList = todoDao.selectByCriteriaForPaging(paramTodo,
				paramTodo.getStart(), paramTodo.getLimit());
		List<Todo> results = new ArrayList<Todo>();
		if (null != todoList) {
			String dealDateStr = "";
			for (int i = 0; i < todoList.size(); i++) {
				Todo todo = todoList.get(i);
				dealDateStr = DateUtils.formatDate2Str(todo.getDealDate(), DateUtils.DATE_PATTON_1);
				if(Constants.MAX_DATE.equals(dealDateStr)){
					todo.setDealDateStr("");
				}else{
					todo.setDealDateStr(dealDateStr);
				}
				todo.setCreateDateStr(DateUtils.formatDate2Str(
						todo.getCreateTime(), DateUtils.DATE_TIME_PATTON_1));
				results.add(todo);
			}
		}
		return results;
	}

	/**
	 * 查询任务列表带分页
	 * @param paramNote 任务
	 * @return List 任务列表
	 */
	public List<Todo> selectByCriteria(Todo paramTodo) {
		// 查询任务列表带分页
		paramTodo = getConditions(paramTodo);
		paramTodo.setCreateUser(SessionUtils.getCurrentUserId());
		List<Todo> todoList = todoDao.selectByCriteria(paramTodo);
		List<Todo> results = new ArrayList<Todo>();
		if (null != todoList) {
			for (int i = 0; i < todoList.size(); i++) {
				Todo todo = todoList.get(i);
				todo.setDealDateStr(DateUtils.formatDate2Str(
						todo.getDealDate(), DateUtils.DATE_PATTON_1));
				todo.setCreateDateStr(DateUtils.formatDate2Str(
						todo.getCreateTime(), DateUtils.DATE_TIME_PATTON_1));
				results.add(todo);
			}
		}
		return results;
	}

	/**
	 * 添加任务
	 * @param todo 任务
	 */
	public void insert(Todo todo) {
		// 删除区分：未删除
		todo.setDelflag(Constants.DEL_FLAG_1);
		// 系统时间
		Timestamp sysdate = new Timestamp(System.currentTimeMillis());
		todo.setCreateUser(SessionUtils.getCurrentUserId());
		todo.setCreateTime(sysdate);
		todo.setUpdateUser(SessionUtils.getCurrentUserId());
		todo.setUpdateTime(sysdate);
		todoDao.insert(todo);
	}

	/**
	 * 修改任务
	 * @param todo 任务
	 */
	public void update(Todo todo) {
		// 系统时间
		Timestamp sysdate = new Timestamp(System.currentTimeMillis());
		todo.setUpdateUser(SessionUtils.getCurrentUserId());
		todo.setUpdateTime(sysdate);
		todoDao.updateByPrimaryKey(todo);
	}

	/**
	 * 删除任务
	 * @param todoId 任务ID
	 */
	public void delete(String todoIds) {
		String[] todoIdStr = todoIds.split(",");
		for (int i = 0; i < todoIdStr.length; i++) {
			// 删除任务
			todoDao.deleteByPrimaryKey(Integer.parseInt(todoIdStr[i]));
		}
	}
	
	/**
	 * 设置公共参数
	 * @param paramTodo 参数对象
	 */
	private Todo getConditions(Todo paramTodo){
		paramTodo.setCreateUser(SessionUtils.getCurrentUserId());// 当前用户
		return paramTodo;
	}
}
